{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import os\n",
    "# Dataset from: https://www.cs.toronto.edu/~kriz/cifar.html\n",
    "data_folder = os.path.join(os.path.expanduser(\"~\"), \"Data\", \"cifar-10-batches-py\")\n",
    "batch1_filename = os.path.join(data_folder, \"data_batch_1\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import pickle\n",
    "# Bigfix thanks to: http://stackoverflow.com/questions/11305790/pickle-incompatability-of-numpy-arrays-between-python-2-and-3\n",
    "def unpickle(filename):\n",
    "    with open(filename, 'rb') as fo:\n",
    "        return pickle.load(fo, encoding='latin1')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "batch1 = unpickle(batch1_filename)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "image_index = 100\n",
    "image = batch1['data'][image_index]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "image = image.reshape((32,32, 3), order='F')\n",
    "import numpy as np\n",
    "image = np.rot90(image, -1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "from matplotlib import pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7f2aa5e3d550>"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f2ac8224ba8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.imshow(image)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Application"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "batches = []\n",
    "for i in range(1, 6):\n",
    "    batch_filename = os.path.join(data_folder, \"data_batch_{}\".format(i))\n",
    "    batches.append(unpickle(batch1_filename))\n",
    "    break    #IMPORTANT -- see chapter for explanation of this line"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "X = np.vstack([batch['data'] for batch in batches])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "X = np.array(X) / X.max()\n",
    "X = X.astype(np.float32)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import OneHotEncoder\n",
    "y = np.hstack(batch['labels'] for batch in batches).flatten()\n",
    "y = OneHotEncoder().fit_transform(y.reshape(y.shape[0],1)).todense()\n",
    "y = y.astype(np.float32)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "from sklearn.cross_validation import train_test_split\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "X_train = X_train.reshape(-1, 3, 32, 32)\n",
    "X_test = X_test.reshape(-1, 3, 32, 32)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "from lasagne import layers\n",
    "layers=[\n",
    "        ('input', layers.InputLayer),\n",
    "        ('conv1', layers.Conv2DLayer),\n",
    "        ('pool1', layers.MaxPool2DLayer),\n",
    "        ('conv2', layers.Conv2DLayer),\n",
    "        ('pool2', layers.MaxPool2DLayer),\n",
    "        ('conv3', layers.Conv2DLayer),\n",
    "        ('pool3', layers.MaxPool2DLayer),\n",
    "        ('hidden4', layers.DenseLayer),\n",
    "        ('hidden5', layers.DenseLayer),\n",
    "        ('output', layers.DenseLayer),\n",
    "        ]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "from nolearn.lasagne import NeuralNet\n",
    "from lasagne.nonlinearities import sigmoid, softmax\n",
    "\n",
    "nnet = NeuralNet(layers=layers,\n",
    "                 input_shape=(None, 3, 32, 32),\n",
    "                 conv1_num_filters=32,\n",
    "                 conv1_filter_size=(3, 3),\n",
    "                 conv2_num_filters=64,\n",
    "                 conv2_filter_size=(2, 2),\n",
    "                 conv3_num_filters=128,\n",
    "                 conv3_filter_size=(2, 2),\n",
    "                 pool1_pool_size=(2,2),  # Updated from book's version due to code change\n",
    "                 pool2_pool_size=(2,2),  # Updated from book's version due to code change\n",
    "                 pool3_pool_size=(2,2),  # Updated from book's version due to code change\n",
    "                 hidden4_num_units=500,\n",
    "                 hidden5_num_units=500,\n",
    "                 output_num_units=10,\n",
    "                 output_nonlinearity=softmax,\n",
    "                 update_learning_rate=0.01,\n",
    "                 update_momentum=0.9,\n",
    "                 regression=True,\n",
    "                 max_epochs=3,\n",
    "                 verbose=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "# Neural Network with 874058 learnable parameters\n",
      "\n",
      "## Layer information\n",
      "\n",
      "  #  name     size\n",
      "---  -------  --------\n",
      "  0  input    3x32x32\n",
      "  1  conv1    32x30x30\n",
      "  2  pool1    32x15x15\n",
      "  3  conv2    64x14x14\n",
      "  4  pool2    64x7x7\n",
      "  5  conv3    128x6x6\n",
      "  6  pool3    128x3x3\n",
      "  7  hidden4  500\n",
      "  8  hidden5  500\n",
      "  9  output   10\n",
      "\n",
      "  epoch    train loss    valid loss    train/val  dur\n",
      "-------  ------------  ------------  -----------  ------\n",
      "      1       \u001b[36m0.09003\u001b[0m       \u001b[32m0.09001\u001b[0m      1.00026  21.57s\n",
      "      2       \u001b[36m0.09001\u001b[0m       \u001b[32m0.08999\u001b[0m      1.00023  19.80s\n",
      "      3       \u001b[36m0.08998\u001b[0m       \u001b[32m0.08997\u001b[0m      1.00020  19.41s\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "NeuralNet(X_tensor_type=None,\n",
       "     batch_iterator_test=<nolearn.lasagne.base.BatchIterator object at 0x7f2a8e3cd588>,\n",
       "     batch_iterator_train=<nolearn.lasagne.base.BatchIterator object at 0x7f2a8e3cd4a8>,\n",
       "     check_input=True, conv1_filter_size=(3, 3), conv1_num_filters=32,\n",
       "     conv2_filter_size=(2, 2), conv2_num_filters=64,\n",
       "     conv3_filter_size=(2, 2), conv3_num_filters=128, custom_scores=None,\n",
       "     hidden4_num_units=500, hidden5_num_units=500,\n",
       "     input_shape=(None, 3, 32, 32),\n",
       "     layers=[('input', <class 'lasagne.layers.input.InputLayer'>), ('conv1', <class 'lasagne.layers.conv.Conv2DLayer'>), ('pool1', <class 'lasagne.layers.pool.MaxPool2DLayer'>), ('conv2', <class 'lasagne.layers.conv.Conv2DLayer'>), ('pool2', <class 'lasagne.layers.pool.MaxPool2DLayer'>), ('conv3', <class..., <class 'lasagne.layers.dense.DenseLayer'>), ('output', <class 'lasagne.layers.dense.DenseLayer'>)],\n",
       "     loss=None, max_epochs=3, more_params={},\n",
       "     objective=<function objective at 0x7f2a8e3cb7b8>,\n",
       "     objective_loss_function=<function squared_error at 0x7f2a8e471488>,\n",
       "     on_batch_finished=[],\n",
       "     on_epoch_finished=[<nolearn.lasagne.handlers.PrintLog object at 0x7f2a8e474b70>],\n",
       "     on_training_finished=[],\n",
       "     on_training_started=[<nolearn.lasagne.handlers.PrintLayerInfo object at 0x7f2a8e474be0>],\n",
       "     output_nonlinearity=<function softmax at 0x7f2a8e5ef598>,\n",
       "     output_num_units=10, pool1_pool_size=(2, 2), pool2_pool_size=(2, 2),\n",
       "     pool3_pool_size=(2, 2), regression=True,\n",
       "     train_split=<nolearn.lasagne.base.TrainSplit object at 0x7f2a8e3cd5c0>,\n",
       "     update=<function nesterov_momentum at 0x7f2a8e471e18>,\n",
       "     update_learning_rate=0.01, update_momentum=0.9,\n",
       "     use_label_encoder=False, verbose=1,\n",
       "     y_tensor_type=TensorType(float64, matrix))"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nnet.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.0535705967575\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/rob/anaconda3/envs/LDMbook/lib/python3.4/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n",
      "  sample_weight=sample_weight)\n",
      "/home/rob/anaconda3/envs/LDMbook/lib/python3.4/site-packages/sklearn/metrics/classification.py:1074: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import f1_score\n",
    "y_pred = nnet.predict(X_test)\n",
    "print(f1_score(y_test.argmax(axis=1), y_pred.argmax(axis=1)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "*Maintainer's note:* The relationship between Theano, nolearn and Lasagne is a little tenuous -- they update at different times, off different versions and so on. This code was run with python 3.4 and the following versions of libraries:\n",
    "\n",
    "* Theano==0.8.1\n",
    "* nolearn==0.6a0.dev0\n",
    "* Lasagne==0.2.dev1\n",
    "\n",
    "For full version numbers, see `requirements.txt`:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.4.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
